package com.ricecoder.spring02.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.ricecoder.spring02.pojo.RespEntiry;
import com.ricecoder.spring02.pojo.User;
import com.ricecoder.spring02.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController    //注解使用restcontroller
@RequestMapping("/user")   //总的path /user
@CrossOrigin
public class UserController {

    @Autowired    //注入实现类
    UserService userService;

    //    url: host:port/user/queryAll，get请求
    //   重新调整输出响应体，输出格式为RespEntity对象
    @RequestMapping("/queryAll")
    public RespEntiry getAllUsers() throws JsonProcessingException {
        RespEntiry res = new RespEntiry();
        List<User> users = userService.queryAllUsers();  //查询结果
        if(users!=null){          //如果查询结果存在
            res.setCode(0);       //设定响应体code值为0
            res.setMsg("success"); //设定msg值为success
            res.setData(users);   //输出data值为查询的结果集
        }else{
            res.setCode(200);
            res.setMsg("failed");
            res.setData(users);
        }
        return res;
    }
    //    url: host:port/user/userQueryByID/id ， post请求
    //   路由设定方法 /userQueryByID/{userID},采用这种a/b/c方式请求
    //   这里需要使用@PathVariable方式传递参数userID
    @RequestMapping("/userQueryByID/{userID}")
    public User queryUserByID(@PathVariable("userID") int userID ) {
        return userService.queryUserByID(userID);
    }

    //    url: host:port/user/userAdd  ，增加新用户记录
    @RequestMapping("/userAdd")
    public Boolean addUsers() {
        return userService.addUsers(new User(1, "aotou123", "126656", "1381000000", "1"));
    }

    //    url: host:port/user/userUpdate?userID=1&userpwd=1
    // 请求方式为多参数带问号时则使用@RequestParam接收参数变量
    // restful api风格则使用url: host:port/user/userUpdate/{userID}/{userpwd}
    @RequestMapping("/userUpdate")
    public Boolean UpdateUserPasswordByID(@RequestParam("userID") int userID,
                                  @RequestParam("userpwd") String userpwd) {
        return userService.updateUserPassword(userID,userpwd);
    }

    // restful api风格则使用url: host:port/user/userUpdate/{userID}/{userpwd}
    @RequestMapping("/userUpdate/{userID}/{userpwd}")
    public Boolean updateUserByID(@PathVariable("userID") int userID,
                                  @PathVariable("userpwd") String userpwd) {
        return userService.updateUserPassword(userID,userpwd);
    }
    // restful api风格则使用url: host:port/user/userUpdate/{userID}/{userpwd}
    @RequestMapping("/userUpdateInfo")
    public RespEntiry updateUsers(@RequestBody User user) {
        RespEntiry res = new RespEntiry();
        Boolean flag = userService.updateUsers(user);  //查询结果
        System.out.println(flag);
        if(flag){          //如果查询结果存在
            res.setCode(200);       //设定响应体code值为0
            res.setMsg("success"); //设定msg值为success
            res.setData(flag);   //输出data值为查询的结果
        }else{
            res.setCode(404);
            res.setMsg("failed");
            res.setData(flag);
        }
        return res;
    }

    // restful api风格则使用url: host:port/user/userdel?userID
    @RequestMapping("/userDel")
    public RespEntiry userDeleteById(@RequestParam("userID") int userID) {
        RespEntiry res = new RespEntiry();
        Boolean flag = userService.deleteUsers(userID);  //查询结果
        System.out.println(flag);
        if(flag){          //如果查询结果存在
            res.setCode(200);       //设定响应体code值为0
            res.setMsg("success"); //设定msg值为success
            res.setData(flag);   //输出data值为查询的结果
        }else{
            res.setCode(404);
            res.setMsg("failed");
            res.setData(flag);
        }
        return res;
    }

}
